From 9b320a62f11c5eea57855fe9725c13594d192bb0 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 26 Sep 2008 23:58:12 +0000 Subject: [PATCH] Bug 553578 - tabs are not drawn correctly MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2008-09-26 Matthias Clasen Bug 553578 - tabs are not drawn correctly * gtk/gtknotebook.c: Track the visibility state of notebook tabs between allocations so that we know to redraw the tab labels if tabs are hidden and shown without changing position. Reported by Marek Kašík, patch by Owen Taylor. svn path=/trunk/; revision=21525 --- ChangeLog | 9 +++++++++ gtk/gtknotebook.c | 21 +++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 38d7ab8e7f..2f4c78feff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-09-26 Matthias Clasen + + Bug 553578 - tabs are not drawn correctly + + * gtk/gtknotebook.c: Track the visibility state of notebook tabs + between allocations so that we know to redraw the tab labels if + tabs are hidden and shown without changing position. + Reported by Marek Kašík, patch by Owen Taylor. + 2008-09-26 Matthias Clasen Bug 553133 – GtkFileChooser won't ask to mount a volume diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index e09a0060be..1f3ad2494c 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -153,6 +153,11 @@ struct _GtkNotebookPage guint reorderable : 1; guint detachable : 1; + /* if true, the tab label was visible on last allocation; we track this so + * that we know to redraw the tab area if a tab label was hidden then shown + * without changing position */ + guint tab_allocated_visible : 1; + GtkRequisition requisition; GtkAllocation allocation; @@ -5556,9 +5561,15 @@ gtk_notebook_page_allocate (GtkNotebook *notebook, gint tab_curvature; gint tab_pos = get_effective_tab_pos (notebook); gboolean tab_allocation_changed; + gboolean was_visible = page->tab_allocated_visible; - if (!page->tab_label) - return FALSE; + if (!page->tab_label || + !GTK_WIDGET_VISIBLE (page->tab_label) || + !gtk_widget_get_child_visible (page->tab_label)) + { + page->tab_allocated_visible = FALSE; + return was_visible; + } xthickness = widget->style->xthickness; ythickness = widget->style->ythickness; @@ -5630,6 +5641,12 @@ gtk_notebook_page_allocate (GtkNotebook *notebook, gtk_widget_size_allocate (page->tab_label, &child_allocation); + if (!was_visible) + { + page->tab_allocated_visible = TRUE; + tab_allocation_changed = TRUE; + } + return tab_allocation_changed; } -- 2.30.2